﻿#include "baudinfo.h"
#include <QDebug>

/*
引入debug用于调试输出
*/


// BaudInfo类的构造函数，初始化父对象，并将波特率115200的索引初始化为0
BaudInfo::BaudInfo(QObject *parent) : QAbstractListModel(parent),m_indexOf115(0)
{

}

// 添加所有标准波特率到模型
void BaudInfo::addAll()
{
    //qDebug()<<"-------------baudInfo-----------";
    clear();// 清除现有的波特率信息
    QList<qint32> baudList=QSerialPortInfo::standardBaudRates();// 获取标准波特率列表
    int cnt=0;// 用于记录小于4800的波特率数量
    for(int i=0;i<baudList.size();i++){
        if(115200==baudList[i]){
            // 记录波特率115200的索引
            m_indexOf115=i-cnt;
        }
        if(baudList[i]<4800){
            // 如果波特率小于4800，则增加计数
            cnt++;
        }
        else {
            addBaud(baudList[i]);// 添加波特率到模型
        }

    }
}

// 清除模型中的所有波特率
void BaudInfo::clear()
{
    emit beginResetModel();// 通知模型即将重置
    m_baudInfo.clear();// 清空波特率列表
    emit endResetModel();// 通知模型重置完成

}
// 获取波特率115200的索引，如果不存在则返回0
int BaudInfo::getIndexOf115()
{
    return m_indexOf115;
}
// 添加一个新的波特率到模型
void BaudInfo::addBaud(qint32 &baud)
{
    beginInsertRows(QModelIndex(), rowCount(), rowCount());
    m_baudInfo << baud;
    endInsertRows();
}


// 返回模型中的行数
int BaudInfo::rowCount(const QModelIndex & parent) const {
    Q_UNUSED(parent);// 父索引在此函数中未使用
    return m_baudInfo.count(); // 返回波特率列表的大小
}

// 返回指定模型索引和角色的数据
QVariant BaudInfo::data(const QModelIndex & index, int role) const {
    if (index.row() < 0 || index.row() >= m_baudInfo.count())
        return QVariant();// 如果索引无效，返回无效的QVariant

    const unsigned int &i = m_baudInfo[index.row()];// 获取指定行的波特率
    if (role == baudRole)
        return i;// 如果请求的是波特率角色，返回波特率
    return QVariant();// 如果请求的是其他角色，返回无效的QVariant
}


QHash<int, QByteArray> BaudInfo::roleNames() const {
    QHash<int, QByteArray> roles;
    roles[baudRole] = "baudRole";// 将波特率角色映射到名称
    return roles;// 返回角色名称映射
}

